
package hocusPocus.Partie;

import hocusPocus.IHM.EcranAccueil;
import hocusPocus.IHM.InterfacePlateau;

import java.awt.Color;
import java.util.ArrayList;
import java.util.HashMap;


public final class Jeu {
	private static Plateau plateau;
	private EcranAccueil ihm;
	private InterfacePlateau interfacePlateau;
	public static boolean partieRapide;
	public static boolean partieNormale;
	private static Jeu _instance = null; // singleton pattern
	private ThreadVerificationGrimoire verificationTailleGrimoire;
	private ThreadVerificationBibliotheque verificationTailleBibliotheque;
	private ThreadGagnant threadGagnant;
	
	private Jeu(){
	}
	
	public static Jeu getInstance(){
		if(_instance == null) 
			_instance = new Jeu();
		return _instance;
	}
	
	/**
	 * Methode permettant l'initialisation de la partie
	 * Initialisation de l'interface graphique
	 * Initialisation du plateau
	 */
	public void initPartie() {
		ihm = EcranAccueil.getInstance();
	}

	/**
	 * Initialiser le plateau de jeu
	 * @param HashMap<String, Integer> informationsJoueurs
	 */
	public void initPlateau(HashMap<String, Integer> informationsJoueurs) {
		plateau = Plateau.getInstance();
		plateau.initJoueurs(informationsJoueurs);
		plateau.classerJoueurs(); // Le plus jeune joueur doit commencer
		plateau.initCartes(); // Instancier les cartes
		plateau.getBibliotheque().melangerCartes();
		plateau.distribuerCarte();
		plateau.initChaudron();
		System.out.println("Cartes instanciees et distribuees");
		ihm.getContentPane().removeAll();
		ihm.getContentPane().setBackground(Color.GRAY);
		interfacePlateau = new InterfacePlateau();
		ihm.getContentPane().add(interfacePlateau);
		ihm.getContentPane().validate();
		verificationTailleGrimoire = new ThreadVerificationGrimoire();
		verificationTailleGrimoire.start();
		verificationTailleBibliotheque = new ThreadVerificationBibliotheque();
		verificationTailleBibliotheque.start();
		threadGagnant = new ThreadGagnant();
		threadGagnant.start();
		}
	
	public void resoudrePouvoirCarte() {
	}
	
	public static ArrayList<Joueur> getListeJoueurs() {
		return plateau.getListeJoueurs();
	}
	public InterfacePlateau getInterfacePlateau() {
		return this.interfacePlateau;
	}

	public ThreadVerificationGrimoire getVerificationTailleGrimoire() {
		return verificationTailleGrimoire;
	}
	
	public ThreadVerificationBibliotheque getVerificationTailleBlibliotheque() {
		return verificationTailleBibliotheque;
	}
	
}
